package com.seek.educenter.controller;

import com.seek.educenter.utils.ConstantPropertiesUtil;
import com.seek.servicebase.exceptionhandler.SeekException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * @author: wml
 * @since: 2022/2/20 18:20
 */
@Controller
@RequestMapping("/educenter/wx")
public class WxApiController {

    // 生成微信扫描的二维码
    @GetMapping("login")
    public String getWxQrCode() {
        // 微信开放平台授权 baseUrl
        String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
                "?appid=%s" +
                "&redirect_uri=%s" +
                "&response_type=code" +
                "&scope=snsapi_login" +
                "&state=%s" +
                "#wechat_redirect";

        // 回调地址
        String redirectUrl = ConstantPropertiesUtil.WX_OPEN_REDIRECT_URL; // 获取业务服务器重定向地址
        try {
            redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8"); // url 编码
        } catch (UnsupportedEncodingException e) {
            throw new SeekException(20001, e.getMessage());
        }

        // 防止 csrf 攻击（跨站请求伪造攻击）
        // String state = UUID.randomUUID().toString().replaceAll("-", "");//一般情况下会使用一个随机数
        String state = "imhelen"; // 为了让大家能够使用我搭建的外网的微信回调跳转服务器，这里填写你在 ngrok 的前置域名
//        System.out.println("state = " + state);

        // 采用redis等进行缓存state 使用sessionId为key 30分钟后过期，可配置
        //键："wechar-open-state-" + httpServletRequest.getSession().getId()
        //值：satte
        //过期时间：30分钟

        // 生成 qrcodeUrl
        String qrcodeUrl = String.format(
                baseUrl,
                ConstantPropertiesUtil.WX_OPEN_APP_ID,
                redirectUrl,
                "atguigu");

        return "redirect:" + qrcodeUrl;
    }
}
